package com.hoppinzq.algorithm.graph;

import com.hoppinzq.algorithm.stackAndQueue.MyQueue;

/**
 * 1
 * 无向图：仅仅连接两个顶点
 * 底层：1、二维数组 空间复杂度 O(n^2)
 *      2、邻接表（队列数组）
 * 本类使用邻接表实现
 */
public class MyGraph {
    private final int V;//顶点的数目
    private int E;//边的数目
    private MyQueue<Integer>[] myQueues;//队列数组(先存整型的数据吧)

    /**
     * 初始化指定顶点的图
     * @param V
     */
    public MyGraph(int V){
        this.V=V;
        this.E=0;
        this.myQueues=new MyQueue[V];
        for(int i=0;i<V;i++){
            myQueues[i]=new MyQueue<>();
        }
    }

    /**
     * 返回顶点的个数
     * @return
     */
    public int V(){
        return V;
    }

    /**
     * 返回边的个数
     * @return
     */
    public int E(){
        return E;
    }

    /**
     * 为两个顶点添加边
     * @param v
     * @param w
     */
    public void addEdge(int v,int w){
        this.myQueues[v].enQueue(w);
        this.myQueues[w].enQueue(v);
        E++;
    }

    /**
     * 返回指定顶点所有的相邻顶点
     * @param v
     * @return
     */
    public MyQueue getQueue(int v){
        return myQueues[v];
    }

}
